335a448094a5b3c35b7a6d3dccef184a0b0fb599,crud/src/main/java/com/redhat/lightblue/mediator/Mediator.java,Mediator,save,#SaveRequest#,183

Before Change


        Error.push("save(" + req.getEntityVersion().toString() + ")");
        Response response = new Response(factory.getNodeFactory());
        try {
            OperationContext ctx = newCtx(req, CRUDOperation.SAVE);
            response.setEntity(ctx.getTopLevelEntityName(),ctx.getTopLevelEntityVersion());
            EntityMetadata md = ctx.getTopLevelEntityMetadata();
            if (!md.getAccess().getUpdate().hasAccess(ctx.getCallerRoles())

After Change


        Response response = new Response(factory.getNodeFactory());
        OperationContext ctx=null;
        try {
            ctx = newCtx(req, CRUDOperation.SAVE);
            ctx.measure.begin("save");
            response.setEntity(ctx.getTopLevelEntityName(),ctx.getTopLevelEntityVersion());
            EntityMetadata md = ctx.getTopLevelEntityMetadata();
            if (!md.getAccess().getUpdate().hasAccess(ctx.getCallerRoles())
                    || (req.isUpsert() && !md.getAccess().getInsert().hasAccess(ctx.getCallerRoles()))) {
                ctx.setStatus(OperationStatus.ERROR);
                ctx.addError(Error.get(CrudConstants.ERR_NO_ACCESS, "insert/update " + ctx.getTopLevelEntityName()));
            } else {
                factory.getInterceptors().callInterceptors(InterceptPoint.PRE_MEDIATOR_SAVE, ctx);
                CRUDController controller = factory.getCRUDController(md);
                updatePredefinedFields(ctx, controller, md.getName());
                runBulkConstraintValidation(ctx);
                if (!ctx.hasErrors() && ctx.hasDocumentsWithoutErrors()) {
                    LOGGER.debug(CRUD_MSG_PREFIX, controller.getClass().getName());
                    controller.save(ctx, req.isUpsert(), req.getReturnFields());
                    ctx.getHookManager().queueMediatorHooks(ctx);
                    ctx.measure.begin("postProcessSavedDocs");
                    List<JsonDoc> updatedDocuments = ctx.getOutputDocumentsWithoutErrors();
                    if (updatedDocuments != null && !updatedDocuments.isEmpty()) {
                        response.setEntityData(JsonDoc.listToDoc(applyRange(req, updatedDocuments), factory.getNodeFactory()));
                        response.setResultMetadata(ctx.getOutputDocumentMetadataWithoutErrors());
                       response.setModifiedCount(updatedDocuments.size());
                    }
                    ctx.measure.end("postProcessSavedDocs");
                    if (!ctx.hasErrors() && !ctx.hasDocumentErrors()
                            && updatedDocuments != null && updatedDocuments.size() == ctx.getDocuments().size()) {
                        ctx.setStatus(OperationStatus.COMPLETE);